home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / VObject.h < prev    next >
C/C++ Source or Header  |  1990-12-05  |  8KB  |  294 lines

  1. #ifndef VObject_First
  2. #ifdef __GNUG__
  3. #pragma once
  4. #endif
  5. #define VObject_First
  6.  
  7. #include "EvtHandler.h"
  8. #include "Command.h"
  9. #include "Collection.h"
  10. #include "CmdNo.h"
  11.  
  12. enum VObjFlags {
  13.     eVObjEnabled    =   BIT(eEvtLast+1),
  14.     eVObjOpen       =   BIT(eEvtLast+2),
  15.     eVObjHFixed     =   BIT(eEvtLast+3),
  16.     eVObjVFixed     =   BIT(eEvtLast+4),
  17.     eVObjLayoutCntl =   BIT(eEvtLast+5),
  18.     eVObjKbdFocus   =   BIT(eEvtLast+6),
  19.     eVObjDefault    =   eVObjEnabled,
  20.     eVObjLast       =   eEvtLast + 6
  21. };
  22.  
  23. enum VObjAlign {
  24.     eVObjHLeft  = BIT(0),
  25.     eVObjHCenter= BIT(1),
  26.     eVObjHRight = BIT(2),
  27.     eVObjHExpand= BIT(3),
  28.     eVObjH      = eVObjHLeft|eVObjHCenter|eVObjHRight|eVObjHExpand, 
  29.     eVObjVTop   = BIT(8),
  30.     eVObjVBase  = BIT(9),
  31.     eVObjVCenter= BIT(10),
  32.     eVObjVBottom= BIT(11), 
  33.     eVObjVExpand= BIT(12), 
  34.     eVObjV      = eVObjVTop|eVObjVBase|eVObjVCenter|eVObjVBottom|eVObjVExpand 
  35. };
  36.  
  37.  
  38. class VObject : public EvtHandler {
  39.     short id;
  40.     VObject *container;
  41.  
  42. public:
  43.     Rectangle contentRect;
  44.  
  45. protected:
  46.     void Init(int, Rectangle, class View*);
  47.  
  48. public:
  49.     MetaDef(VObject);
  50.  
  51.     VObject(class EvtHandler *next, Rectangle r, int id= cIdNone);
  52.     VObject(Rectangle r, int id= cIdNone);
  53.     VObject(int id= cIdNone);
  54.  
  55.     Point GetPortPoint(Point p);
  56.     virtual Rectangle GetViewedRect();
  57.     virtual void AddToClipper(class Clipper*);
  58.     virtual void RemoveFromClipper(class Clipper*);
  59.  
  60.     //---- acessing ----------------------------
  61.     int GetId()
  62.     { return id; }
  63.     void SetId(int i)
  64.     { id= i; }
  65.     bool Enabled()
  66.     { return TestFlag(eVObjEnabled); }
  67.     virtual void Enable(bool b= TRUE, bool redraw= TRUE);
  68.     void Disable(bool redraw= TRUE)
  69.     { Enable(FALSE, redraw); }
  70.     bool IsOpen()
  71.     { return TestFlag(eVObjOpen); }
  72.  
  73.     //---- sizes -------------------------------
  74.     virtual Metric GetMinSize();
  75.     int Width()
  76.     { return contentRect.extent.x; }
  77.     int Height()
  78.     { return contentRect.extent.y; }
  79.     virtual int Base();
  80.     Point GetExtent()
  81.     { return contentRect.extent; }
  82.     Point GetOrigin()
  83.     { return contentRect.origin; };
  84.     Rectangle ContentRect()
  85.     { return contentRect; }
  86.  
  87.     void SetContentRect(Rectangle, bool);
  88.     virtual void SetExtent(Point);
  89.     virtual void SetOrigin(Point);
  90.     void SetWidth(int w)
  91.     { SetExtent(Point(w,Height())); }
  92.     void SetHeight(int h)
  93.     { SetExtent(Point(Width(),h)); }
  94.     void Move(Point delta, bool redraw= TRUE);
  95.  
  96.     void CalcExtent();
  97.     virtual void Open(bool mode= TRUE);
  98.     void Close()
  99.     { Open(FALSE); }
  100.  
  101.     void Align(Point at, Metric m, VObjAlign a);
  102.     virtual bool ContainsPoint(Point p);
  103.  
  104.     //---- drawing ----------------------------
  105.     virtual void SetFocus(Rectangle, Point);
  106.     void Focus(Rectangle r)
  107.     { SetFocus(r, gPoint0); }
  108.     void Focus()
  109.     { SetFocus(GetViewedRect(), gPoint0); }
  110.  
  111.     void Print();
  112.     virtual void DrawAll(Rectangle, bool highlight= FALSE);
  113.     virtual void DrawInner(Rectangle r, bool highlight= FALSE);
  114.     virtual void DrawHighlight(Rectangle);
  115.     virtual void Draw(Rectangle);
  116.     virtual void Outline2(Point, Point);
  117.     void Outline(Point delta);
  118.     // alternative interface to Outline2
  119.     void OutlineRect(Rectangle r);
  120.     // alternative interface to Outline2
  121.     virtual void Highlight(HighlightState);
  122.     virtual void InvalidateRect(Rectangle r);
  123.     virtual void InvalidateViewRect(Rectangle r);
  124.     void ForceRedraw();
  125.     virtual void UpdateEvent();
  126.     virtual GrCursor GetCursor(Point p);
  127.  
  128.     virtual Command *Input(Point lp, Token t, Clipper *vf);
  129.     virtual Command *DispatchEvents(Point, Token, Clipper*);
  130.     virtual void DoOnItem(int, VObject*, Point);
  131.  
  132.     virtual VObject *Detect(BoolFun f, void *arg);
  133.     // find first entry where f returns true
  134.     VObject *FindItem(int);
  135.     VObject *FindItem(Point);
  136.     VObject *FindItem(VObject*);
  137.     VObject *FindItemPtr(VObject *g);
  138.  
  139.     //---- container handling ------------------
  140.     virtual void SetContainer(VObject*);
  141.     VObject *GetContainer()
  142.     { return container; }
  143.     
  144.     VObject *FindContainerOfClass(Class *cla);
  145.     class View *GetView();
  146.     class Clipper *Getclipper();
  147.     class BlankWin *GetWindow();
  148.     virtual Point ContainerPoint(Point);
  149.  
  150.     //---- keyboard focus
  151.     bool WantsKbdFocus()
  152.     { return TestFlag(eVObjKbdFocus); }
  153.     
  154.     virtual Command *GetMover();
  155.     virtual Command *GetStretcher();
  156.     
  157.     EvtHandler *GetNextHandler();
  158.     virtual Command *DoRightButtonDownCommand(Point, Token, int, class Clipper*);
  159.     virtual Command *DoLeftButtonDownCommand(Point, Token, int);
  160.     virtual Command *DoMiddleButtonDownCommand(Point, Token, int);
  161.     
  162.     virtual Command *DoKeyCommand(int, Point, Token);
  163.     virtual Command *DoCursorKeyCommand(EvtCursorDir, Point, Token);
  164.     virtual Command *DoFunctionKeyCommand(int, Point, Token);
  165.     
  166.     virtual Command *DoOtherEventCommand(Point, Token);
  167.     virtual Command *TrackInContent(Point, Token, Command*);
  168.  
  169.     //---- generic methods --------------------
  170.     char *AsString();
  171.     int Compare (Object*);
  172.     bool IsEqual (Object*);
  173.     ostream& PrintOn (ostream&);
  174.     istream& ReadFrom(istream&);
  175. };
  176.  
  177. typedef VObject* VObjPtr;
  178.  
  179. //---- VObjectCommand ----------------------------------------------------------
  180.  
  181. class VObjectCommand: public Command {
  182. protected:
  183.     VObject *vop;
  184.     Rectangle oldRect, lastRect, constrainRect, newRect;
  185.     Point delta, grid;
  186.     GrCursor newcursor, oldcursor;
  187.     bool firstmove;
  188.     int hysterese;
  189.  
  190. protected:
  191.     VObjectCommand(VObject *g);
  192.     void Init(VObject *g, Rectangle cr, Point gr, GrCursor cd, int hy);
  193.     Command *TrackMouse(TrackPhase, Point, Point, Point);
  194.     void TrackConstrain(Point, Point, Point*);    
  195.     void TrackFeedback(Point, Point, bool);
  196.     void DoIt();
  197.     void UndoIt();
  198. };
  199.  
  200. //---- VObjectMover ------------------------------------------------------------
  201.  
  202. class VObjectMover: public VObjectCommand {
  203. protected:
  204.     Point origin;
  205.  
  206.     void Init(VObject *g, Rectangle cr, Point gr, GrCursor, int hy);
  207.  
  208. public:
  209.     VObjectMover(VObject*);
  210.     VObjectMover(VObject*, Rectangle);
  211.     VObjectMover(VObject*, Rectangle, Point, GrCursor cr= eCrsMoveHand, int hy= 2);
  212.  
  213.     Command *TrackMouse(TrackPhase, Point, Point, Point);
  214. };
  215.  
  216. //---- VObjectStretcher --------------------------------------------------------
  217.  
  218. class VObjectStretcher: public VObjectCommand {
  219. protected:
  220.     Point minSize, p1, p2;
  221.     int corner;
  222.  
  223.     void Init(VObject *g, Rectangle cr, Point gr, GrCursor, int hy, Point ms);
  224.  
  225. public:
  226.     VObjectStretcher(VObject*);
  227.     VObjectStretcher(VObject*, Rectangle);
  228.     VObjectStretcher(VObject*, Rectangle, Point ms);
  229.     VObjectStretcher(VObject*, Rectangle, Point ms, Point,
  230.                       GrCursor cr= eCrsMoveStretch, int hy= 2);
  231.  
  232.     Command *TrackMouse(TrackPhase, Point, Point, Point);
  233.     void TrackConstrain(Point, Point, Point*);
  234. };
  235.  
  236. //---- CompositeVObject --------------------------------------------------------------
  237.  
  238. enum CompositeVObjectFlags {
  239.     eCompVObjDefault= eVObjDefault,
  240.     eCompVObjLast   = eVObjLast+0
  241. };
  242.  
  243. class CompositeVObject: public VObject {
  244. protected:
  245.     bool modified;
  246.     Collection *list;
  247. public:
  248.     MetaDef(CompositeVObject);
  249.  
  250.     CompositeVObject(int id= cIdNone, Collection *cp= 0);
  251.     CompositeVObject(int id, ...);
  252.     CompositeVObject(int id, va_list ap);
  253.     ~CompositeVObject();
  254.  
  255.     void FreeAll();
  256.     void Open(bool mode= TRUE);
  257.     void DoObserve(int, int, void*, Object*);
  258.     void SetModified()
  259.     { modified= TRUE; }
  260.     Collection *GetList();
  261.     Iterator *MakeIterator();
  262.     int Size();
  263.     virtual void Add(VObject*);
  264.     virtual VObject *Remove(VObject*);
  265.     VObject *SetAt(int at, VObject *vop);
  266.  
  267.     void Draw(Rectangle);
  268.     void Outline2(Point, Point);
  269.     Command *DispatchEvents(Point, Token, Clipper*);
  270.     void Enable(bool b= TRUE, bool redraw= TRUE);
  271.     void SetContainer(VObject*);
  272.     void SetItems(VObject **);
  273.     void SetItems(va_list ap);
  274.     void SetOrigin(Point);
  275.     void SetExtent(Point e);
  276.     Metric GetMinSize();
  277.     int Base();
  278.     VObject *Detect(BoolFun, void *arg);
  279.     VObject *At(int n)
  280.     { return (VObject*)list->At(n); }
  281.     void SendDown(int, int, void*);
  282.     ostream& PrintOn (ostream&s);
  283.     istream& ReadFrom(istream &);
  284.     void InspectorId(char *buf, int sz);
  285.     void Parts(class Collection*);
  286. };
  287.  
  288. #include "Cluster.h"
  289. #include "Filler.h"
  290. #include "ImageItem.h"
  291. #include "TextItem.h"
  292.  
  293. #endif VObject_First
  294.